﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ZPod.MTG.Communication
{
	public interface IClient : IDisposable
	{
		/// <summary>
		/// Nombre del jugador
		/// </summary>
		string PlayerName
		{
			get;
			set;
		}

		/// <summary>
		/// String de conexion para contactar al servidor.
		/// </summary>
		string ConnectionString
		{
			get;
			set;
		}

		/// <summary>
		/// Listado de juegos disponibles en el servidor
		/// </summary>
		List<string> AvailableGames
		{
			get;
		}

		/// <summary>
		/// Estado del juego actual
		/// </summary>
		GameState CurrentState
		{
			get;
		}

		/// <summary>
		/// Juego actual
		/// </summary>
		string CurrentGame
		{
			get;
			set;
		}

		/// <summary>
		/// Envia al servidor el estado del jugador conectado
		/// </summary>
		/// <param name="state"></param>
		void SetPlayerState(PlayerState state);

		/// <summary>
		/// Agrega una carta en la zona "comun"
		/// </summary>
		/// <param name="card"></param>
		void AddCommonCard(Card card);

		/// <summary>
		/// Quita una carta de la zona "comun"
		/// </summary>
		/// <param name="index"></param>
		void RemoveCommonCard(int index);

		/// <summary>
		/// Crea un nuevo juego
		/// </summary>
		/// <param name="name"></param>
		void CreateGame(string name);

		/// <summary>
		/// Inicia la conexion con el servidor
		/// </summary>
		void Connect();

		/// <summary>
		/// Finaliza la conexion con el servidor
		/// </summary>
		void Disconnect();
	}
}
